package object

import (
	"fmt"
	"strconv"
)

type Pagination struct {
	// 页码
	PageNo uint32 `json:"page_no"`
	// 页码大小
	PageSize uint32 `json:"page_size"`
}

func NewPagination(pageNo, pageSize uint32) *Pagination {
	return &Pagination{
		PageNo:   pageNo,
		PageSize: pageSize,
	}
}

// GetDbOffset 获取数据库偏移
func (p *Pagination) GetDbOffset() string {
	if p.PageSize == 0 {
		return ""
	}
	if p.PageNo == 0 {
		p.PageNo = 1
	}
	offset := (p.PageNo - 1) * p.PageSize
	return fmt.Sprintf(" LIMIT %d OFFSET %d", p.PageSize, offset)
}

// ParsePageNo Parse 字符串解析
func (p *Pagination) ParsePageNo(pageNo string) {
	if pageNo == "" {
		p.PageNo = 1
	} else {
		t, _ := strconv.ParseInt(pageNo, 10, 64)
		p.PageNo = uint32(t)
	}
}

// ParsePageSize Parse 字符串解析
func (p *Pagination) ParsePageSize(pageSize string) {
	if pageSize != "" {
		t, _ := strconv.ParseInt(pageSize, 10, 64)
		p.PageSize = uint32(t)
	} else {
		p.PageSize = 0
	}
}

// Location 坐标
type Location struct {
	// 纬度
	Lat float64 `json:"lat"`
	// 经度
	Lng float64 `json:"lng"`
}

// AddressInfo 地址信息
type AddressInfo struct {
	// 行政区划编码
	CityCode string `json:"city_code"`
	// 区级编码
	DistrictCode string `json:"district_code"`
	// 地址
	Address string `json:"address"`
	// 国家
	Nation string `json:"nation"`
	// 省
	Province string `json:"province"`
	// 城市
	City string `json:"city"`
	// 区
	District string `json:"district"`
	// 街道
	Street string `json:"street"`
	// 门牌号
	StreetNo string `json:"street_no"`
}

// LocationInfo 坐标信息
type LocationInfo struct {
	// 关键地址信息
	Title string `json:"title"`
	// 纬度
	Latitude float64 `json:"latitude"`
	// 经度
	Longitude float64 `json:"longitude"`
	// 行政区划编码
	CityCode string `json:"city_code"`
	// 地址
	Address string `json:"address"`
	// 国家
	Nation string `json:"nation"`
	// 省
	Province string `json:"province"`
	// 城市
	City string `json:"city"`
	// 区
	District string `json:"district"`
	// 街道
	Street string `json:"street"`
	// 门牌号
	StreetNo string `json:"street_no"`
	// 距离
	Distance float64 `json:"distance"`
	// 分类
	Category string `json:"category"`
}
